<?php
class CalendariosController extends AppController {

	var $name = 'Calendarios';
	var $uses = array('User','Client','Person','Turn','Agenda','Product');
    var $helpers = array('Calendar');

    function beforeFilter () {
        parent::beforeFilter();

		// Aplico el Layout segun la Vista o si es AJAX
		if ($this->RequestHandler->isAjax()) {
			$this->layout = 'ajax';
		}else{
			// Cambio la Vista por la del Rol
			$this->layout = strtolower($this->Session->read('VistaActual'));
		}
    }
	function mensual($year = null, $month = null) {
	
		$month_list = array('january', 'febuary', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december');
		$day_list = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

		$data = null;
	
		
		if(!$year || !$month)
			{
				$year = date('Y');
				$month = strtolower(date('F'));
				$month_num = date('n');
			}

		$flag = 0;
				
		for($i = 0; $i < 12; $i++) { // check the month is valid if set
				if(strtolower($month) == $month_list[$i])
					{
						if(intval($year) != 0)
							{
								$flag = 1;
								$month_num = $i + 1;
								$month_name = $month_list[$i];
								break;
							}
					}
			}
					
		if($flag == 0) { // if no date set, then use the default values
				$year = date('Y');
				$month = date('M');
				$month_name = date('F');
				$month_num = date('m');
		}
		
		$this->Turn->recursive = 0;
		$turns = $this->Turn->find('all', array(
						'conditions' => array(
											'Turn.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
											'Turn.fecha BETWEEN ? AND ?' => array( date("Y-m-d 00:00:00",mktime(0,0,0,$month_num,1,$year)),date("Y-m-d",mktime(0,0,0,$month_num+1,1,$year)) ),
											'NOT' => array ('Turn.staterecord_id' => array('2'))
										),
						'fields'=> array('Turn.fecha'), 
		) );

		foreach($turns as $registro) {
	
			$fecha_registro = substr($registro['Turn']['fecha'],0,10);

			if(isset($data[$fecha_registro])) {
				$data[$fecha_registro]++;
			}else{
				$data[$fecha_registro] = 1;
			}
		}

		$this->set('year', $year);
		$this->set('month', $month);
		$this->set('base_url', "");
		$this->set('data', $data);
	}

	
	
	
	
	
	function semanal($anio = null, $mes = null, $dia = null, $id_profesional = null, $visualizacion='cal', $ver='all') {

		$RolUsuario = strtolower($_SESSION['VistaActual']); //profesional, asistente, administrador

		$data = null;

        $client_id    = $this->Session->read('ClientesUsuarioLogueado.id');
        $this->set('client_id', $client_id);
        $user_id      = $this->Session->read('Auth.User.id');
        $this->set('user_id', $user_id);
        $sucursal_id  = $this->Session->read('Sucursal.id');
		$this->set('sucursal_id', $sucursal_id);
		$profesional_id = $this->Session->read('ProfesionalSeleccionado');
		$this->set('profesional_id', $profesional_id);
		
		if(!$anio || !$mes || !$dia){
			$anio = date('Y');
			$mes = date('m');
			$dia = date("d");
		}

		$this->set('visualizacion', $visualizacion);

		
		$agenda_seleccionada  = $this->Session->read('AgendaSeleccionada');
		$this->set('agenda_seleccionada', $agenda_seleccionada);
		
        //-------- Obtengo los medicos y agendas de esta sucursal
        $Medicos = $this->User->MedicosDeUnaSucursal($sucursal_id);
		$this->set('Medicos', $Medicos);


		
		//--------------------------------------------------------------------------------
		// Obtengo el rango de fecha para consultar los turnos (inicio y fin de la semana)
		// De esta manera traigo en la consulta, solo la semana actual, antes traia -7 +7
		//--------------------------------------------------------------------------------
		$DiaActual      = mktime(0,0,0,$mes,$dia,$anio);
		$dias_menos     = date("w",$DiaActual)-1; //Cantidad de dias a restar para calcular el comienzo de semana
		$dias_mas       = 6-$dias_menos; // Cantidad de dias a sumar para calcular el fin de la semana
		$consulta_desde = date("Y-m-d",mktime(0,0,0,$mes,$dia-$dias_menos,$anio)); // Primer dia de la semana
		$consulta_hasta = date("Y-m-d",mktime(23,59,59,$mes,$dia+$dias_mas,$anio)); // Ultimo dia de la semana
		
		/* ----------------------------------------------------------------------------- */
		/* Veifico si el Usuario tiene Segmentos creados 								 */
		/* ----------------------------------------------------------------------------- */

			$hay_segmentos = $this->Agenda->query("
				SELECT AgendasSegment.segment_id
				FROM 
					agendas AS Agenda
					INNER JOIN agendas_segments AS AgendasSegment ON AgendasSegment.agenda_id = Agenda.id
				WHERE
					Agenda.client_id = '$client_id' AND Agenda.user_id = '$profesional_id' AND Agenda.id = '$agenda_seleccionada'
			"
			);

			$this->set('hay_segmentos', $hay_segmentos);

		/* ----------------------------------------------------------------------------- */
		/* Consulto la Configuracion de la Agenda para la Fecha Seleccionada			 */
		/* ----------------------------------------------------------------------------- */

			$config_agenda = $this->Agenda->query("
				SELECT 
					Segment.day_id, Segment.horario_desde, Segment.horario_hasta, Segment.duracion, Segment.sobreturno
				FROM
					agendas AS Agenda 
					INNER JOIN agendas_segments AS AgendasSegment ON AgendasSegment.agenda_id = Agenda.id
					INNER JOIN segments AS Segment ON Segment.id = AgendasSegment.segment_id
				WHERE 
					Agenda.client_id = '$client_id' AND Agenda.user_id = '$profesional_id' AND Agenda.id = '$agenda_seleccionada'
				ORDER BY 
					Segment.day_id, Segment.horario_desde
			"
			);

		/* ----------------------------------------------------------------------------- */
		/* Consulto los Feriados para la Fecha Seleccionada								 */
		/* ----------------------------------------------------------------------------- */

			$feriados = $this->Agenda->query("
				SELECT 
					Feriado.name, Feriado.fecha
				FROM
					clients_feriados AS ClientsFeriado
					INNER JOIN feriados AS Feriado ON Feriado.id = ClientsFeriado.feriado_id
				WHERE 
					ClientsFeriado.client_id = '$client_id' AND 
					Feriado.fecha >= '".date("Y-m-d", mktime(0,0,0,$mes,$dia-7,2010))."' AND 
					Feriado.fecha <= '".date("Y-m-d", mktime(0,0,0,$mes,$dia+7,2010))."'
				ORDER BY 
					Feriado.fecha
			"
			);


		/* ----------------------------------------------------------------------------- */
		/* Consulto los Turnos realizados												 */
		/* ----------------------------------------------------------------------------- */
			if ($ver=='all'){
				$turnos = $this->Turn->find('all', array(
							'conditions' => array(
												'Turn.client_id' => $client_id,
												'Turn.doctor_id' => $profesional_id,
												'Turn.agenda_id' => $agenda_seleccionada,
												'Turn.fecha BETWEEN ? AND ?' => array($consulta_desde,$consulta_hasta),
											),
							'order' => array('Turn.fecha'),
							'fields' => array('Person.id','Person.lastname', 'Person.name','Turn.fecha', 'Turn.id', 'Turn.nota', 'Turn.stateturn_id', 'Turn.confirm', 'Turn.sobreturno','Turn.producto_id' ),
				) );
			} else {
				$turnos = $this->Turn->find('all', array(
							'conditions' => array(
												'Turn.client_id' => $client_id,
												'Turn.doctor_id' => $profesional_id,
												'Turn.agenda_id' => $agenda_seleccionada,
												'Turn.stateturn_id <>' => 3,
												'Turn.fecha BETWEEN ? AND ?' => array($consulta_desde,$consulta_hasta),
											),
							'order' => array('Turn.fecha'),
							'fields' => array('Person.id','Person.lastname', 'Person.name','Turn.fecha', 'Turn.id', 'Turn.nota', 'Turn.stateturn_id', 'Turn.confirm', 'Turn.sobreturno','Turn.producto_id' ),
				) );
			}
			$this->set('ver',$ver);


			foreach($turnos as $registro) {

				// Determino el Nro de la Semana, 1 para Lunes y 7 para el Domingo
				$nro_semana = date("w",strtotime($registro['Turn']['fecha']));

				// Si el Domingo
				if($nro_semana == 0){
					$nro_semana = 7;
				}

				
				//-------------- Obtengo el motivo de consulta
				if( $registro['Turn']['producto_id']>0 ){
					$product = $this->Product->read(null,$registro['Turn']['producto_id']);
					$nombre_producto = $product['Product']['name'];
				} else {
					$nombre_producto = '';
				}
				
				
				// Defino el Nombre del Paciente a mostrar (si es temporario o no)
				if(empty($registro['Person']['id'])){
					$datos_paciente_aux = $registro['Turn']['nota']." <small>($nombre_producto)</small>";
				}else{
					$datos_paciente_aux = $registro['Person']['lastname'].' '.$registro['Person']['name']." <small>($nombre_producto)</small>";
				}

			

				// Si el turno está cancelado
				$a_style_turno = '';
				$style_turno   = ' style="margin-bottom:10px;" ';
				
				if($registro['Turn']['stateturn_id'] == 3 ){
					$style_turno = ' style="text-decoration:line-through;margin-bottom:10px;" ';
					$str_checkbox = '';

				} else {
					if($registro['Turn']['sobreturno'] == 'S' ){
						$style_turno = ' style="margin-bottom:10px;background:#E5FAFA;" ';
					}
					if( empty($registro['Turn']['confirm']) ) {
						$a_style_turno  = ' style="color:#CCC; font-style:oblique;" ';
						$str_checkbox = "<input type='checkbox' style='width:14px;' name='turn_id_".$nro_semana."[]' value='{$registro['Turn']['id']}'>";

					} else {
						$str_checkbox = "<input type='checkbox' style='width:14px;' name='turn_id_".$nro_semana."[]' value='{$registro['Turn']['id']}'>";
					}

				}


				// Determino si alguna de las fechas a mostrar son anteriores a HOY y desactive los links
				if(strftime($registro['Turn']['fecha']) < strftime(date("Y-m-d"))){
					if(isset($data[$registro['Turn']['fecha']])){
						$data[$registro['Turn']['fecha']] .= "<p id='card_turno' $style_turno>$datos_paciente_aux</p>";
					}else{
						$data[$registro['Turn']['fecha']] = "<p id='card_turno' $style_turno>$datos_paciente_aux</p>";
					}

				}else{

					if(!isset($data[$registro['Turn']['fecha']])){
						$data[$registro['Turn']['fecha']] = '';
					}

					// Si el Paciente es Temporario
					if(empty($registro['Person']['id'])){

						$data[$registro['Turn']['fecha']] .= "<p id='card_turno' $style_turno >$str_checkbox <a href='/people/add/{$registro['Turn']['id']}' $a_style_turno >$datos_paciente_aux</a></p>";

					} else {

						$data[$registro['Turn']['fecha']] .= "<p id='card_turno' $style_turno >$str_checkbox<a href='/people/view/{$registro['Person']['id']}/99' $a_style_turno >$datos_paciente_aux</a></p>";

					}
				}
			}

		/* ----------------------------------------------------------------------------- */

		$this->set('anio', $anio);
		$this->set('mes', $mes);
		$this->set('dia', $dia);
		$this->set('data', $data);
		$this->set('id_profesional', $this->Session->read('ProfesionalSeleccionado'));
		$this->set('config_agenda', $config_agenda);
		$this->set('feriados', $feriados);
	} //end function semanal




	
	
	function diario($anio = null, $mes = null, $dia = null, $id_profesional = null, $visualizacion='cal', $ver='all') {

		$data = null;

		if(!$anio || !$mes || !$dia){
			$anio = date('Y');
			$mes = date('m');
			$dia = date("d");
		}

		$this->set('visualizacion', $visualizacion);

		
		$client_id      = $this->Session->read('ClientesUsuarioLogueado.id');
		$this->set('client_id', $client_id);
		
		$profesional_id = $this->Session->read('ProfesionalSeleccionado');
		$this->set('profesional_id', $profesional_id);
		
		
		$agenda_seleccionada  = $this->Session->read('AgendaSeleccionada');
		$this->set('agenda_seleccionada', $agenda_seleccionada);
		
		//-------------------------------------------------
		// Cuales son los Medicos de este Cliente ?
		$doctors = $this->requestAction('/users/obtenerListadoDoctores/'.$client_id);

		//-------------------------------------------------------------------
		// Cuales son las Agendas de este Cliente?
		$ag = $this->Agenda->find('all', array(
							'conditions' => array(
									'Agenda.client_id' => $client_id ,
									'Agenda.staterecord_id' => 1,
									),
							'order' => array('Agenda.nombre' => 'ASC')
					) );
		$Agendas = array();			
		foreach($ag as $clave=>$valor){
			if(empty($valor['AgendasSegment'])){
				unset($ag[$clave]);
			} else {
				$Agendas[$valor['Agenda']['user_id']][$valor['Agenda']['id']] = $valor['Agenda']['nombre'];
				//$Agendas[$valor['Agenda']['id']] = $valor['Agenda']['nombre'];
			}
		}
		
		//---------------------------------------------------------------------
		// Ordena las Agendas por Cleinte
		//---------------------------------------------------------------------
		$Medicos = array();
		foreach($doctors as $medico_id=>$medico_nombre){
			if( isset($Agendas[$medico_id]) and !empty($Agendas[$medico_id]) ){
			
				foreach($Agendas[$medico_id] as $agenda_id=>$nombre_agenda){
					$Medicos[$medico_id][$agenda_id]['id']            = $medico_id;
					$Medicos[$medico_id][$agenda_id]['nombre']        = $medico_nombre;
					$Medicos[$medico_id][$agenda_id]['agenda_id']     = $agenda_id;
					$Medicos[$medico_id][$agenda_id]['nombre_agenda'] = $nombre_agenda;
				}
			
			}
		
		}
		$this->set('Medicos', $Medicos);
		
		
		//--------------------------------------------------------------------------------
		// Obtengo el rango de fecha para consultar los turnos (inicio y fin de la semana)
		// De esta manera traigo en la consulta, solo la semana actual, antes traia -7 +7
		//--------------------------------------------------------------------------------
		$consulta_desde = date("Y-m-d H:i:s",mktime(0,0,0,$mes,$dia,$anio)); // Primer dia de la semana
		$consulta_hasta = date("Y-m-d H:i:s",mktime(23,59,59,$mes,$dia,$anio)); // Ultimo dia de la semana
		$nro_dia = date("w",strtotime($consulta_desde));
		if($nro_dia == 0){ $nro_dia = 7; }

		/* ----------------------------------------------------------------------------- */
		/* Veifico si el Usuario tiene Segmentos creados 								 */
		/* ----------------------------------------------------------------------------- */

			$hay_segmentos = $this->Agenda->query("
				SELECT AgendasSegment.segment_id
				FROM 
					agendas AS Agenda
					INNER JOIN agendas_segments AS AgendasSegment ON AgendasSegment.agenda_id = Agenda.id
				WHERE
					Agenda.client_id = '".$this->Session->read('ClientesUsuarioLogueado.id')."' AND Agenda.user_id = '".$this->Session->read('ProfesionalSeleccionado')."'
			"
			);

			$this->set('hay_segmentos', $hay_segmentos);
			
		/* ----------------------------------------------------------------------------- */
		/* Consulto la Configuracion de la Agenda para la Fecha Seleccionada			 */
		/* ----------------------------------------------------------------------------- */

			$config_agenda = $this->Agenda->query("
				SELECT 
					Segment.day_id, Segment.horario_desde, Segment.horario_hasta, Segment.duracion, Segment.sobreturno
				FROM
					agendas AS Agenda 
					INNER JOIN agendas_segments AS AgendasSegment ON AgendasSegment.agenda_id = Agenda.id
					INNER JOIN segments AS Segment ON Segment.id = AgendasSegment.segment_id
				WHERE 
					Agenda.client_id = '".$this->Session->read('ClientesUsuarioLogueado.id')."' 
					AND Agenda.user_id = '".$this->Session->read('ProfesionalSeleccionado')."'
					AND Segment.day_id = '".$nro_dia."'
				ORDER BY 
					Segment.day_id, Segment.horario_desde
			"
			);

		/* ----------------------------------------------------------------------------- */
		/* Consulto los Feriados para la Fecha Seleccionada								 */
		/* ----------------------------------------------------------------------------- */

			$feriados = $this->Agenda->query("
				SELECT 
					Feriado.name, Feriado.fecha
				FROM
					clients_feriados AS ClientsFeriado
					INNER JOIN feriados AS Feriado ON Feriado.id = ClientsFeriado.feriado_id
				WHERE 
					ClientsFeriado.client_id = '".$this->Session->read('ClientesUsuarioLogueado.id')."' AND 
					Feriado.fecha >= '".date("Y-m-d", mktime(0,0,0,$mes,$dia-7,2010))."' AND 
					Feriado.fecha <= '".date("Y-m-d", mktime(0,0,0,$mes,$dia+7,2010))."'
				ORDER BY 
					Feriado.fecha
			"
			);


		/* ----------------------------------------------------------------------------- */
		/* Consulto los Turnos realizados												 */
		/* ----------------------------------------------------------------------------- */
			if ($ver=='all'){
				$turnos = $this->Turn->find('all', array(
							'conditions' => array(
												'Turn.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
												'Turn.doctor_id' => $this->Session->read('ProfesionalSeleccionado'),
												'Turn.fecha BETWEEN ? AND ?' => array($consulta_desde,$consulta_hasta),
											),
							'order' => array('Turn.fecha'),
							'fields' => array('Person.id','Person.lastname', 'Person.name','Turn.fecha', 'Turn.id', 'Turn.nota', 'Turn.stateturn_id', 'Turn.confirm', 'Turn.sobreturno','Turn.producto_id' ),
				) );
			} else {
				$turnos = $this->Turn->find('all', array(
							'conditions' => array(
												'Turn.client_id' => $this->Session->read('ClientesUsuarioLogueado.id'),
												'Turn.doctor_id' => $this->Session->read('ProfesionalSeleccionado'),
												'Turn.stateturn_id <>' => 3,
												'Turn.fecha BETWEEN ? AND ?' => array($consulta_desde,$consulta_hasta),
											),
							'order' => array('Turn.fecha'),
							'fields' => array('Person.id','Person.lastname', 'Person.name','Turn.fecha', 'Turn.id', 'Turn.nota', 'Turn.stateturn_id', 'Turn.confirm', 'Turn.sobreturno','Turn.producto_id' ),
				) );
			}
			$this->set('ver',$ver);

			foreach($turnos as $registro) {

				// Determino el Nro de la Semana, 1 para Lunes y 7 para el Domingo
				$nro_semana = date("w",strtotime($registro['Turn']['fecha']));

				// Si el Domingo
				if($nro_semana == 0){
					$nro_semana = 7;
				}

				
				//-------------- Obtenog el motivo de consulta
				if( $registro['Turn']['producto_id']>0 ){
					$product = $this->Product->read(null,$registro['Turn']['producto_id']);
					$nombre_producto = $product['Product']['name'];
				} else {
					$nombre_producto = '';
				}
				
				
				// Defino el Nombre del Paciente a mostrar (si es temporario o no)
				if(empty($registro['Person']['id'])){
					$datos_paciente_aux = $registro['Turn']['nota']." <small>($nombre_producto)</small>";
				}else{
					$datos_paciente_aux = $registro['Person']['lastname'].' '.$registro['Person']['name']." <small>($nombre_producto)</small>";
				}


				// Si el turno está cancelado
				$a_style_turno = '';
				$style_turno = ' style="margin-bottom:10px;" ';
				if($registro['Turn']['stateturn_id'] == 3 ){
					$style_turno = ' style="text-decoration:line-through;margin-bottom:10px;" ';
					$str_checkbox = '';

				} else {
					if($registro['Turn']['sobreturno'] == 'S' ){
						$style_turno = ' style="margin-bottom:10px;background:#E5FAFA;" ';
					}
					if( empty($registro['Turn']['confirm']) ) {
						$a_style_turno  = ' style="color:#CCC; font-style:oblique;" ';
						$str_checkbox = '<input type="checkbox" style="width:30px;" name="turn_id_'.$nro_semana.'[]" value="'.$registro['Turn']['id'].'">';

					} else {
						$str_checkbox = '<input type="checkbox" style="width:30px;" name="turn_id_'.$nro_semana.'[]" value="'.$registro['Turn']['id'].'">';
					}

				}


				if(!isset($data[$registro['Turn']['fecha']])){
					$data[$registro['Turn']['fecha']] = '';
				}

				// Si el Paciente es Temporario
				if(empty($registro['Person']['id'])){

					$data[$registro['Turn']['fecha']] .= '<p id="card_turno" '.$style_turno.' >'.$str_checkbox.' <a href="/people/add/'.$registro['Turn']['id'].'" '.$a_style_turno.' >'.$datos_paciente_aux.'</a></p>';

				} else {

					$data[$registro['Turn']['fecha']] .= '<p id="card_turno" '.$style_turno.' >'.$str_checkbox.'<a href="/people/view/'.$registro['Person']['id'].'/99" '.$a_style_turno.' >'.$datos_paciente_aux.'</a></p>';

				}

			}

		/* ----------------------------------------------------------------------------- */

		$this->set('anio', $anio);
		$this->set('mes', $mes);
		$this->set('dia', $dia);
		$this->set('data', $data);
		$this->set('id_profesional', $this->Session->read('ProfesionalSeleccionado'));
		$this->set('config_agenda', $config_agenda);
		$this->set('feriados', $feriados);
	} //end function diario
}
?>